package javaTeste.tEnum;

import java.Metodo;
import java.classe.Classe;
import java.classe.Construtor;
import java.classe.Enum;
import java.classe.TokensSource;
import java.pacote.Pacote;
import java.recurso.Recurso;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;

public class TesteCriarUmaClasseEmun implements Especificacao {

	Enum agua = null;

	Enum teste = null;

	@Before
	public void up() {
		agua = new Enum("Agua");
		teste = new Enum("Test");
	}

	@Test
	public void enumAguaPublic() {
		agua.setModificador(TokensSource.MODIFICADORPUBLICO);
		Assert.assertEquals("public enum Agua{;}", agua.codigoFonte());
	}

	@Test
	public void enumTestNomeDoPacoteAgua() {
		teste.setPacote(new Pacote("agua"));
		Assert.assertEquals("package agua", teste.getPacote().codigoFonte());
		Assert.assertEquals("package agua;enum Test{;}", teste.codigoFonte());

	}

	@Test
	public void enumTest() {
		Assert.assertEquals("enum Test{;}", teste.codigoFonte());
	}

	@Test
	public void enumAguaComClasseFogoETerra() {
		agua.addClasse(new Classe("Fogo"));
		agua.addClasse(new Classe("Terra"));
		Assert.assertEquals("enum Agua{;class Fogo{}class Terra{}}", agua
				.codigoFonte());

	}

	@Test
	public void enumAguaComClasseFogo_TerraValoresLaranja_Abacate() {
		agua.addClasse(new Classe("Fogo"));
		agua.addClasse(new Classe("Terra"));
		agua.addValorEnum("Laranja");
		agua.addValorEnum("Abacate");
		Assert.assertEquals(
				"enum Agua{Laranja, Abacate;class Fogo{}class Terra{}}", agua
						.codigoFonte());
	}

	@Test
	public void enumAguaMetodoAgua() {
		agua.addMetodo(new Metodo("agua"));
		Assert.assertEquals("enum Agua{;void agua(){}}", agua.codigoFonte());

	}

	@Test
	public void enumAguaMetodoAguaEFogo() {
		agua.addMetodo(new Metodo("agua"));
		agua.addMetodo(new Metodo("fogo"));
		Assert.assertEquals("enum Agua{;void agua(){}void fogo(){}}", agua
				.codigoFonte());
	}

	@Test
	public void enumAguaPublicRecursoAguaConstrutorSemParametro() {
		agua.addMetodo(new Metodo("agua"));
		agua.addMetodo(new Metodo("fogo"));
		agua.addRecurso(new Recurso("agua"));
		agua.addConstrutor(new Construtor(new Classe("Agua")));
		agua.setModificador("public");
		Assert
				.assertEquals(
						"import agua;public enum Agua{;Agua(){}void agua(){}void fogo(){}}",
						agua.codigoFonte());

	}

	@Test
	public void enumAguaPublicRecursoAgua_Terra() {
		agua.setModificador("public");
		agua.addRecurso(new Recurso("agua"));
		agua.addRecurso(new Recurso("terra"));
		Assert.assertEquals("import agua;import terra;public enum Agua{;}",
				agua.codigoFonte());

	}

	@Test
	public void enumTestEmunsTerra_Fogo() {
		teste.addValorEnum("TERRA");
		teste.addValorEnum("FOGO");
		Assert.assertEquals("enum Test{TERRA, FOGO;}", teste.codigoFonte());

	}

}